package com.example.spider.provider.multidownload.task;

import com.example.spider.task.AbstractSpiderTask;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import jodd.net.HttpMethod;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

/**
 * 解析m3u8元数据
 *
 * @author lym
 */
@Getter
@Setter
@Accessors(chain = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.MINIMAL_CLASS, defaultImpl = ParseDownloadFileTask.class)
public class ParseDownloadFileTask extends AbstractSpiderTask<byte[]> {

    private String id;

    /**
     * 全局唯一定位，确定保存位置与幂等
     * 影片名称
     */
    private String name;

    /**
     * 哪个网页上的 optional
     */
    private String sourcePageUrl;

    // ----------- handle存储记录使用 -----------------------
    private int recoverCount;

    // version
    private String etag;

    // 大小
    private long fileSize;

    // 下载文件存储名 idempotentFilePath

    // 文件切片的总数
    private int totalPart;

    // 文件校验
    private String md5;

    @Override
    public boolean canRetry() {
        // m3u8 文件不大，不用重试太多次
        return recoverCount < 15;
    }

    @Override
    public boolean supportCluster() {
        return false;
    }

    @Override
    public String getRequestMethod() {
        return super.requestMethod = HttpMethod.GET.name();
    }

    public boolean supportMultiPartDownload() {
        return totalPart > 1;
    }

}
